package optimizacion;

public class CromosomaFuncion4 extends Cromosoma{
    
	final double min = 0;
    final double max = Math.PI;
	
    public CromosomaFuncion4(int numGenes, double tolerancia){
    	super(numGenes, tolerancia);
    	this.numGenes = numGenes;
    	this.tolerancia = tolerancia;
        crearGenes(min, max);
        calcularLongitud();
    }


	public CromosomaFuncion4(){
		super();
	}
	
	@Override
	public double calcularAptitud() {  
		double[] fenotipos = new double[numGenes];
		
		for (int i = 0; i < numGenes; i++)
			fenotipos[i] = calcularFenotipoIesimo(min, max, i);
		
		aptitud =  Funciones.f4(fenotipos, numGenes);
		aptitudRev = aptitud;
    	aptitudEscaladoLineal = aptitud;
		return aptitud;
	}
	
	
	public double revisarAptitud(double cmax) {   
		aptitudRev =  calcularAptitudRevisadaMinimizacion(cmax);
		aptitudEscaladoLineal = aptitudRev;
    	return aptitudRev;
	}    
	
	public CromosomaFuncion4 clone (){
		CromosomaFuncion4 crom = new CromosomaFuncion4();
	
		crom.numGenes = numGenes;
		crom.longitud = longitud;
		crom.aptitud = aptitud;
		crom.aptitudRev = aptitudRev;
		crom.aptitudEscaladoLineal = aptitudEscaladoLineal;
		crom.puntuacion = puntuacion;
		crom.puntuacionAcumulada = puntuacionAcumulada;
		crom.tolerancia = tolerancia;
		
		crom.genes = new GenBinario[longitud];
		
		for (int i = 0; i < numGenes; i++)
			crom.genes[i] = genes[i].clone();    	
		
		return crom;
	}
}
